/**
 *
 */
package com.nightwalker.xsite.controller;

import java.io.IOException;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;

import com.nightwalker.xsite.bean.ArquivoBean;
import com.nightwalker.xsite.bean.AutorBean;
import com.nightwalker.xsite.bean.ObraBean;
import com.nightwalker.xsite.bean.ObraBeanPesquisa;
import com.nightwalker.xsite.bean.TipoBean;
import com.nightwalker.xsite.delegate.ObraDelegate;
import com.nightwalker.xsite.infra.ErroDeSistemaException;

/**
 * ObraController <br>
 * <br>
 * <b>Description:</b> Controller para a manipulação de obras. Utiliza um
 * ObraBean para manipular os dados.<br>
 * Sua principal função é receber a requisição do usuário e enviá-la para o
 * responsável pelo tratamento. <br>
 * <br>
 * Created in Jan 27, 2008 4:20:39 PM <br>
 * <b>version:1.0</b> <br>
 * <b>Modifications:</b>
 */
public class ObraController extends FrontController {

	private ObraBean obra = new ObraBean();
	private ObraBeanPesquisa obraPesquisa = new ObraBeanPesquisa();
	private AutorBean autor = new AutorBean();
	private TipoBean tipo = new TipoBean();

	/**
	 *
	 * <b>Description: Apenas envia o usuario para a página de inclusão de Obras.</b>
	 * <br><br>
	 * @return
	 * String
	 */
	public String iniciarInclusao() {
		return "incluir";
	}

	public String incluirObra() throws ErroDeSistemaException {
		ObraDelegate filmeDelegate = new ObraDelegate();
		log.debug("Incluindo uma obra");
		filmeDelegate.incluirObra(obra);
		log.debug("Obra incluida com sucesso");

		return null;
	}

	public String retrieveArquivo() throws ErroDeSistemaException, IOException {

		ObraDelegate filmeDelegate = new ObraDelegate();
		log.info("Recuperando o arquivo da obra de id: " + obraPesquisa.getId());
		ArquivoBean arquivoBean = filmeDelegate.retrieveArquivo(Integer.parseInt(obraPesquisa
				.getId()));
		byte[] arquivo = arquivoBean.getArquivo();

		log.debug("Enviando o arquivo para o usuário");
		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletResponse response = (HttpServletResponse) context.getExternalContext()
				.getResponse();
		response.setContentType("application/" + arquivoBean.getTipo()); // or "application/octet-stream", your choice
		response.setContentLength(arquivo.length);
		response.setHeader("Content-disposition", "inline; filename=\" " + arquivoBean.getNome()
				+ " \"");
		response.getOutputStream().write(arquivo); // bytes = the byte array.
		context.responseComplete();
		log.debug("Resposta enviada com sucesso");

		return null;
	}

	public String iniciarPesquisa() {
		log.debug("Indo para a página de pesquisa.");
		return "pesquisar";
	}

	public String pesquisarObra() throws ErroDeSistemaException {
		ObraDelegate obraDelegate = new ObraDelegate();
		log.debug("Pesquisando uma obra");
		obraDelegate.pesquisarObra(obraPesquisa);
		log.debug("Obra pesquisada com sucesso");

		return "resultado";
	}

	public String repositorio(){
		return "repositorio";
	}

	/**
	 * @return the obra
	 */
	public ObraBean getObra() {
		return obra;
	}

	/**
	 * @param obra the obra to set
	 */
	public void setObra(ObraBean filme) {
		this.obra = filme;
	}

	/**
	 * @return the obraPesquisa
	 */
	public ObraBeanPesquisa getObraPesquisa() {
		return obraPesquisa;
	}

	/**
	 * @param obraPesquisa the obraPesquisa to set
	 */
	public void setObraPesquisa(ObraBeanPesquisa obraPesquisa) {
		this.obraPesquisa = obraPesquisa;
	}

	/**
	 * @return the autor
	 */
	public AutorBean getAutor() {
		return autor;
	}

	/**
	 * @param autor the autor to set
	 */
	public void setAutor(AutorBean autor) {
		this.autor = autor;
	}

	/**
	 * @return the tipo
	 */
	public TipoBean getTipo() {
		return tipo;
	}

	/**
	 * @param tipo the tipo to set
	 */
	public void setTipo(TipoBean tipo) {
		this.tipo = tipo;
	}

}
